package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloModulo;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author David y Aitor
 */
public class BorrarModuloAccion implements Accion {

  
    private final String visualizarcursos = "visualizar-curso-accion";

    /**
     * Descripción: ejecuta la acción de borrado del modulo
     * @param servlet
     * @param request
     * @param response
     * @return devuelve el router que dirige a la página que corresponda (a Inicio o a Principal)
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion = request.getSession();
          AccionServlet as=(AccionServlet) servlet;
        AccionRouter router = null;
        ArrayList<String> mensajes = new ArrayList<String>();
        Boolean correcto = false;
        int idModulo;

        boolean ejecutar = Verificador.sinReenvio("aleatorioBorrarModulo", sesion, request);

        if (sesion.getAttribute("usuario") != null && request.getMethod().equalsIgnoreCase("POST")) {
            ModeloModulo modelo = (ModeloModulo) servlet.getServletContext().getAttribute("ModeloModulo");

            if (request.getParameter("modid") == null) { //Se elimina un único modulo
                try {
                    idModulo = Integer.parseInt(request.getParameter("modid"));
                } catch (NumberFormatException ex) {
                    idModulo = -1;
                }
                if (idModulo != -1 && ejecutar) {
                    try {
                        modelo.eliminarModulo(idModulo);
                        correcto = true;
                    } catch (GestorFormacionExcepcion ex) {
                         Logger.getLogger(BorrarModuloAccion.class.getName()).log(Level.SEVERE, null, ex);
                        sesion.setAttribute("excepciones", ex.getMessage());
                    }
                }
            } else { //Se elimina una lista de modulos
                ArrayList ids = new ArrayList();
                try {
                    for (String idStr : ((String[]) request.getParameterValues("modid"))) {
                        ids.add(Integer.parseInt(idStr));
                    }
                } catch (NumberFormatException ex) {
                    ids = null;
                }
                if (ids != null && ejecutar) {
                    try {
                        modelo.eliminarModulo(ids);
                        correcto = true;
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(BorrarModuloAccion.class.getName()).log(Level.SEVERE, null, ex);
                        sesion.setAttribute("excepciones", ex.getMessage());
                    }
                }
            }
            if (correcto) {
                mensajes.add("mensaje-borrar-modulo");
                sesion.setAttribute("mensajes", mensajes);
            }
            try {
                router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarcursos),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(BorrarModuloAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(BorrarModuloAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(BorrarModuloAccion.class.getName()).log(Level.SEVERE, null, ex);
            }

        } else {
            router = new AccionRouter("inicio");
        }
        return router;
    }

   
}
